
#   以下代码实现了一个名为 AddAucScore 的函数，其功能与 Seurat 的 AddModuleScore 类似，
# 但它是基于 AUCell 算法来计算每个细胞在给定基因集（features）上的“活性”得分（AUC 值），
# 并将该得分作为一个新的特征（metadata）添加到 Seurat 对象中。

AddAucScore <- function(object, features, assay = NULL, solt = 'data', name = "AUC", seed = 3407){
  if (!is.null(x = seed)) { set.seed(seed = seed) }
  assay.old <- DefaultAssay(object = object)
  assay <- assay %||% assay.old
  
  cells_rankings <- AUCell::AUCell_buildRankings(GetAssayData(object, solt = solt), plotStats = FALSE) 
  cells_AUC <- AUCell::AUCell_calcAUC(
    features, 
    cells_rankings, 
    aucMaxRank = nrow(cells_rankings) * 0.1
  )
  
  test_data <- as.data.frame(AUCell::getAUC(cells_AUC))
  rownames(test_data) <- paste0(name, 1:length(features))
  
  test_data <- as.data.frame(t(test_data))
  object[[colnames(test_data)]] <- test_data
  
  CheckGC()
  DefaultAssay(object = object) <- assay.old
  return(object)
}

# 其他注解：%||% 是 rlang 包（及其依赖）定义的“空值合并”中缀函数，加载 rlang 包或依赖 rlang 的包，如 dplyr、tidyr、ggplot2 等
#